#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 3、设计一个程序，实现 学生信息录入系统(姓名、年龄、分数)
// 1、可以制作一个简单的登录系统 账号、密码的验证(其实就是字符串的比较 strcmp)
// 2、录入信息之后，可以查询
#define MAX_STUDENTS 10 // 最大学生数
typedef struct Student
{
    char username[100];
    char name[100];
    int age;
    int score;
} Student;

typedef struct Account
{
    char *username;
    char *password;
} Account;

Account account = {"1234", "123"}; // 账号密码
Student students[MAX_STUDENTS] = { // 学生信息
    {"1234", "温奕锋", 23, 100},
    {"5678", "张三", 20, 90},
    {"9012", "李四", 21, 85}};

int studentCount = 3;
char username[100] = {0}; // 使用账号

int login();                // 登录
void printf_function_menu();         // 打印主菜单函数
void printStudentInfo();    // 查询学生信息
void updataStudent();       // 更新学生信息
void insert();              // 录入学生信息
void viewStudents();        // 遍历学生信息
void menuOperate(int menu); // 执行菜单
void goOn();                // 返回主菜单

int main()
{
    int menu; // 操作
    if (login() == 1)
    {
        system("cls"); // 清空控制台内容
        while (1)
        {
            printf_function_menu();
            scanf("%d", &menu);
            menuOperate(menu);
            goOn();
        }
    }

    return 0;
}

// 登录
int login()
{
    char password[100] = {0};
    printf("请输入账号:");
    scanf("%99s", username);
    printf("请输入密码:");
    scanf("%99s", password);
    if (!strcmp(account.username, username))
    {
        if (!strcmp(account.password, password))
            return 1;
        else
        {
            printf("密码错误!");
            return -1;
        }
    }
    else
    {
        printf("账号不存在!");
        return -1;
    }
}

// 打印主菜单函数
void printf_function_menu()
{
    printf("             学生管理系统              \n");
    printf("----------------------------------------\n");
    printf("| 1、查询学生信息\t\t       |\n");
    printf("| 2、更新学生信息\t\t       |\n");
    printf("| 3、录入学生信息\t\t       |\n");
    printf("| 4、查看所有学生信息\t\t       |\n");
    printf("| 5、退出\t\t\t       |\n");
    printf("| 6、\t\t\t\t       |\n");
    printf("----------------------------------------\n");
    printf("请输入相应的序号选择!          \n");
}

// 执行菜单
void menuOperate(int menu)
{
    system("cls"); // 清空控制台内容
    switch (menu)
    {
    case 1:
        printStudentInfo();
        break;
    case 2:
        updataStudent();
        break;
    case 3:
        insert();
        break;
    case 4:
        viewStudents();
        break;
    case 5:
        printf("退出成功!");
        exit(0);
        break;
    default:
        break;
    }
}

// 查询学生信息
void printStudentInfo()
{
    int found = 0;
    for (int i = 0; i < studentCount; i++)
    {
        if (strcmp(students[i].username, username) == 0)
        {
            printf("\n--- 学生信息 ---\n");
            printf("姓名: %s\n", students[i].name);
            printf("年龄: %d\n", students[i].age);
            printf("分数: %d\n", students[i].score);
            found = 1;
            break;
        }
    }
    if (!found)
    {
        printf("未找到学号为 %s 的学生信息!\n", username);
    }
}

// 更新学生信息
void updataStudent()
{
    for (int i = 0; i < studentCount; i++)
    {
        if (strcmp(students[i].username, username) == 0)
        {
            char a = 0, b = 0, c = 0;
            printf("更新信息:\n");
            // 更新姓名
            printf("姓名: %s 是否修改?(Y/N)\n", students[i].name);
            scanf(" %c", &a); //" %c"  避免读到换行符
            while (getchar() != '\n')
                ;
            if (a == 'Y' || a == 'y')
            {

                printf("请输入新的姓名:");
                scanf("%s", students[i].name);
                while (getchar() != '\n')
                    ;
            }
            // 更新年龄
            printf("年龄: %d 是否修改?(Y/N)\n", students[i].age);
            scanf(" %c", &b);
            while (getchar() != '\n')
                ;
            if (b == 'Y' || b == 'y')
            {
                printf("请输入新的年龄:");
                scanf("%d", &students[i].age);
                while (getchar() != '\n')
                    ;
            }
            // 更新分数
            printf("分数: %d 是否修改?(Y/N)\n", students[i].score);
            scanf(" %c", &c);
            while (getchar() != '\n')
                ;
            if (c == 'Y' || c == 'y')
            {
                printf("请输入新的分数:");
                scanf("%d", &students[i].score);
                while (getchar() != '\n')
                    ;
            }
            break;
        }
    }
}

// 录入新学生
void insert() 
{
    char c;
    printf("是否录入学生信息?(Y/N)\n");
    scanf(" %c", &c);
    while (getchar() != '\n')
        ;
    if (c == 'Y' || c == 'y')
    {
        printf("录入学生信息:\n");
        // printf("测试信息:studentCount = %d上一个学生:%s\n", studentCount, students[studentCount - 1].name);
        printf("请输入学生账号:");
        scanf("%s", students[studentCount].username);
        while (getchar() != '\n')
            ;
        printf("请输入学生姓名:");
        scanf("%s", students[studentCount].name);
        while (getchar() != '\n')
            ;
        printf("请输入学生年龄:");
        scanf("%d", &students[studentCount].age);
        while (getchar() != '\n')
            ;
        printf("请输入学生分数:");
        scanf("%d", &students[studentCount].score);
        printf("录入学生信息:姓名:%s,年龄:%d,分数:%d\n", students[studentCount].name, students[studentCount].age, students[studentCount].score);
        studentCount++; // 更新学生数
    }
    else if (c == 'N' || c == 'n')
    {
        return;
    }
}

// 遍历学生信息
void viewStudents()
{
    for (int i = 0; i < studentCount; i++)
    {
        printf("第%d学生信息:姓名:%s,年龄:%d,分数:%d\n", i + 1, students[i].name, students[i].age, students[i].score);
    }
}

// 返回主菜单
void goOn()
{
    while (1)
    {
        char c;
        printf("是否返回主菜单?(Y/N)");
        scanf(" %c", &c);
        if (c == 'Y' || c == 'y')
        {
            system("cls"); // 清空控制台内容
            break;
        }
    }
}